from threading import Thread, Lock
import time

locks = Lock()

class threadValue(Thread):
    def __init__(self,name):
        super().__init__()
        self.name = name

    def run(self):
        print(self.name)

def worker(value):
    #获取锁,保证同一时刻只有一个进程在执行
    locks.acquire()
    print("我正在做作业!")
    print(value)
    time.sleep(3)
    print("我的作业已完成!")
    #解开锁,等待下一个线程的执行
    locks.release()

def listen(value):
    locks.acquire()
    print("我正在听歌!")
    print(value)
    time.sleep(3)
    print("我的歌曲已听完!")
    locks.release()

if __name__ == '__main__':
    # 创建线程
    threadOne = Thread(target=worker, args=("不洛",))
    threadTwo = Thread(target=listen, args=("王五",))

    # 开启线程守护，如果主线程结束，子进程如果未结束，会被强制结束，如果不开启线程守护，主线程会等待子进程结束后结束
    # threadOne.daemon = True
    # threadTwo.daemon = True

    # 开启线程，子线程会执行被赋予的任务
    threadOne.start()
    threadTwo.start()
    # time.sleep(3)

    #线程的阻塞,等待子线程执行完,主线程才会继续执行
    threadOne.join()
    threadTwo.join()

    print("结束!")



    # test = threadValue("张三")
    # test.start()